from pyspark.context import SparkContext

sc = SparkContext()

lines_rdd = sc.textFile("../../data/students.txt")

# Driver端的一个普通的列表
ids = [
    "1500100003",
    "1500100004",
    "1500100022",
    "1500100053",
    "1500100123",
    "1500100434"
]

# 广播变量
# 将Driver端的一个普通变量广播到Executor
# 当在算子内使用这个变量时。就不需要和task一起发送到Executor
# 可以减少变量的副本数，提高执行效率
broadcast_ids = sc.broadcast(ids)


def filter_fun(line):
    id = line.split(",")[0]

    # 获取广播变量
    idss = broadcast_ids.value


    # 在Executor端使用了端的一个变量
    return id in idss


filter_rdd = lines_rdd.filter(filter_fun)

filter_rdd.foreach(print)

print(ids)
